class Solution {
    public int numDecodings(String ss) {
        int n = ss.length();
        char[] s = ss.toCharArray();
        int[] dp = new int[n];
        //初始化
        if (s[0]!='0') dp[0]=1;
        //边界情况处理
        if (n==1) return dp[0];

        if (s[0]!='0'&&s[1]!='0') dp[1]+=1;
        int c = 10*(s[0]-'0')+(s[1]-'0');
        if (c>=10&&c<=26) dp[1]+=1;

        for (int i = 2; i <n; i++) {
            if (s[i]!='0')dp[i]+=dp[i-1];

            int t = 10*(s[i-1]-'0')+(s[i]-'0');
            if (t>=10&&t<=26) dp[i]+=dp[i-2];

        }
        return dp[n-1];
    }
}
